<html>
<head><meta charset="utf-8"><title>The jobserver-per-rustc patch · t-compiler/wg-parallel-rustc · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/index.html">t-compiler/wg-parallel-rustc</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html">The jobserver-per-rustc patch</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="185641464"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185641464" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185641464">(Jan 14 2020 at 21:19)</a>:</h4>
<p>Ok I've finally gotten some time to test out <span class="user-mention" data-user-id="116122">@simulacrum</span>'s patch here -- <a href="https://github.com/rust-lang/rust/pull/67398#issuecomment-571863525" target="_blank" title="https://github.com/rust-lang/rust/pull/67398#issuecomment-571863525">https://github.com/rust-lang/rust/pull/67398#issuecomment-571863525</a></p>



<a name="185641544"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185641544" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185641544">(Jan 14 2020 at 21:19)</a>:</h4>
<p>some quick testing shows that it is indeed working in terms of limiting jobs, <code>-j4</code> on my 28-thread machine indeed only pins 4 cores (ish)</p>



<a name="185641597"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185641597" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185641597">(Jan 14 2020 at 21:20)</a>:</h4>
<p>and I don't see extra processes getting spawned or anything like that</p>



<a name="185641639"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185641639" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185641639">(Jan 14 2020 at 21:20)</a>:</h4>
<p>I do, however, get that weird panic message I posted on the PR</p>



<a name="185641644"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185641644" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185641644">(Jan 14 2020 at 21:20)</a>:</h4>
<p>so something at least is going awry</p>



<a name="185641672"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185641672" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185641672">(Jan 14 2020 at 21:21)</a>:</h4>
<p>I'm not sure if it's from cargo or rustc currently</p>



<a name="185641697"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185641697" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185641697">(Jan 14 2020 at 21:21)</a>:</h4>
<p>One thing -- I have been passively thinking about it, and I think it does not really quite work out, in the sense that our protocol is insufficient since we do not have a "oh Cargo I don't actually need the requested token anymore" state.</p>



<a name="185641734"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185641734" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185641734">(Jan 14 2020 at 21:22)</a>:</h4>
<p>The panic might just be from us requesting/freeing tokens during shutdown as the rayon threadpool winds down</p>



<a name="185641893"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185641893" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185641893">(Jan 14 2020 at 21:23)</a>:</h4>
<p>hm not sure I follow?</p>



<a name="185641962"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185641962" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185641962">(Jan 14 2020 at 21:24)</a>:</h4>
<p>but it does sounds like a situation that'd lend itself ot an edge case pretty quickly</p>



<a name="185642072"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185642072" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185642072">(Jan 14 2020 at 21:25)</a>:</h4>
<p>I'm not sure when rayon will tell us to release tokens, but I could see that happening during thread shutdown</p>



<a name="185642086"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185642086" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185642086">(Jan 14 2020 at 21:25)</a>:</h4>
<p>(may of course be a complete misdiagnosis - I did not see those when testing locally)</p>



<a name="185642207"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185642207" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185642207">(Jan 14 2020 at 21:27)</a>:</h4>
<p>FWIW I'm just running <code>cargo check</code> on cargo itself</p>



<a name="185642216"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185642216" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185642216">(Jan 14 2020 at 21:27)</a>:</h4>
<p>and intermittently getting panics</p>



<a name="185642237"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185642237" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185642237">(Jan 14 2020 at 21:27)</a>:</h4>
<p>hm, and is that with higher thread counts or whatever?</p>



<a name="185642249"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185642249" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185642249">(Jan 14 2020 at 21:27)</a>:</h4>
<p>(that was my test case as well, IIRC)</p>



<a name="185642272"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185642272" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185642272">(Jan 14 2020 at 21:27)</a>:</h4>
<p>I think by default the rustc is <code>-Zthreads=1</code></p>



<a name="185642278"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185642278" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185642278">(Jan 14 2020 at 21:27)</a>:</h4>
<p>so, no</p>



<a name="185642287"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185642287" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185642287">(Jan 14 2020 at 21:27)</a>:</h4>
<p>increasing it causes more panics though</p>



<a name="185642430"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185642430" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185642430">(Jan 14 2020 at 21:29)</a>:</h4>
<p>I can try and dig in</p>



<a name="185642438"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185642438" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185642438">(Jan 14 2020 at 21:29)</a>:</h4>
<p>are you just using the try build?</p>



<a name="185642921"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185642921" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185642921">(Jan 14 2020 at 21:35)</a>:</h4>
<p>running <code>cargo +579786e1369ea425f42bd0d97aa4dfabe24ab79b check</code> gives me a fully clean build</p>



<a name="185643538"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185643538" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185643538">(Jan 14 2020 at 21:42)</a>:</h4>
<p>aha I was able to reproduce I think</p>



<a name="185643732"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185643732" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185643732">(Jan 14 2020 at 21:45)</a>:</h4>
<p><span class="user-mention" data-user-id="116122">@simulacrum</span> oh you can't just use the try build, you'll have to download cargo yourself and put it into the right place</p>



<a name="185643736"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185643736" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185643736">(Jan 14 2020 at 21:45)</a>:</h4>
<p>to make sure you're using the same build's cargo</p>



<a name="185643757"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185643757" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185643757">(Jan 14 2020 at 21:45)</a>:</h4>
<p>ah, I did <code>-c=cargo</code> for rustup-toolchain-install-master and that seems to have worked</p>



<a name="185643771"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185643771" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185643771">(Jan 14 2020 at 21:45)</a>:</h4>
<p>heh that works too</p>



<a name="185643867"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185643867" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185643867">(Jan 14 2020 at 21:46)</a>:</h4>
<p>are you able to reliably reproduce? I've run it multiple times now and only very rarely do I actually see it go wrong</p>



<a name="185646946"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185646946" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185646946">(Jan 14 2020 at 22:17)</a>:</h4>
<p><span class="user-mention" data-user-id="116015">@Alex Crichton</span> Updated the Cargo branch with a flag which I believe should gate it entirely</p>



<a name="185651683"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185651683" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185651683">(Jan 14 2020 at 23:11)</a>:</h4>
<p><span class="user-mention" data-user-id="116122">@simulacrum</span> nice!</p>



<a name="185651696"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185651696" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Crichton <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185651696">(Jan 14 2020 at 23:11)</a>:</h4>
<p>Wanna ping me on the PR and I'll review tmw</p>



<a name="185651702"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185651702" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185651702">(Jan 14 2020 at 23:11)</a>:</h4>
<p>sounds good</p>



<a name="185781413"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/187679-t-compiler/wg-parallel-rustc/topic/The%20jobserver-per-rustc%20patch/near/185781413" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/187679-t-compiler/wg-parallel-rustc/topic/The.20jobserver-per-rustc.20patch.html#185781413">(Jan 16 2020 at 03:08)</a>:</h4>
<p>Okay I've refactored Cargo's job queue and I'm increasingly grumpy about jobserver :)</p>
<p><a href="https://github.com/rust-lang/cargo/pull/7731" target="_blank" title="https://github.com/rust-lang/cargo/pull/7731">https://github.com/rust-lang/cargo/pull/7731</a> should be ready for another round of review though I also want to maybe discuss a bit at our sync meeting tomorrow (in particular it is not apparent to me how to nicely structure implicit token sharing)</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>